package servlets;

import java.io.IOException;
import java.text.ParseException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import utiles.FuncionesImpl;

import capaLogica.Calendario;
import capaLogica.Ciudad;
import capaLogica.CiudadBO;
import capaLogica.Comentario;
import capaLogica.ComentarioBO;
import capaLogica.Evento;
import capaLogica.EventoBO;
import capaLogica.Multimedia;
import capaLogica.MultimediaBO;
import capaLogica.Usuario;
import capaLogica.UsuarioBO;

/**
 * Servlet implementation class EventoCO
 */
public class EventoCO extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public EventoCO() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doPost(request,response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		String accion = request.getParameter("accion");
		try {
			procesarAccion(accion, request, response);
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public void procesarAccion(String accion, HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException, ParseException {
		if (accion.equals("verCalendario")) {
			verCalendario(request, response);
		}else if ( accion.equals("verEvento")){
			verEvento(request,response);
		}else if ( accion.equals("crearEvento")){
			crearEvento(request,response);
		}else if ( accion.equals("guardarEvento")){
			guardarEvento(request,response);
		}else if ( accion.equals("verEventosPerfil")){
			verEventosPerfil(request,response);
		}else if ( accion.equals("asociarseEvento")){
			asociarEvento(request,response);
		}
	}

	private void asociarEvento(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		HttpSession sesion = request.getSession();
		Usuario user = (Usuario)sesion.getAttribute("usuario");
		String idEvento = request.getParameter("idEvento");
		EventoBO eBO = new EventoBO();
		eBO.insertarEventoAsociados(idEvento, user.getIdUsuario());
		verCalendario(request,response);
	}

	private void verEventosPerfil(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		String idPerfil = request.getParameter("idPerfil");
		UsuarioBO uB = new UsuarioBO();
		Usuario usuarioPerfil = uB.recuperarUsuarioByPerfil(idPerfil);
		
		EventoBO em = new EventoBO();
		List<Evento> tareas = em.recuperarEventosByUsuario(usuarioPerfil.getIdUsuario());
		
		request.setAttribute("listaEvento", tareas);
		request.getRequestDispatcher("verEventosPerfil.jsp").include(request, response);
		
	}

	private void guardarEvento(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException, ParseException {
		HttpSession sesion = request.getSession();
		Usuario usuario = (Usuario)sesion.getAttribute("usuario");
		String fecha = request.getParameter("fechaEvento");
		String descripcion = request.getParameter("descripcion");
		String hora = request.getParameter("hora");
		String direccion = request.getParameter("direccion");
		String ciudad = request.getParameter("ciudad");
		
		EventoBO eventoBO = new EventoBO();
		Evento event = new Evento();
		event.setDescripcion(descripcion);
		event.setDireccion(direccion);
		event.setHora(hora);
		event.setFechaEvento(FuncionesImpl.getStringAsFecha(fecha));
		event.setIdCiudad(ciudad);
		event.setIdUsuarioCreador(usuario.getIdUsuario());
		event.setVotos(0);
		eventoBO.insertarEvento(event);
		verCalendario(request,response);
		
	}

	private void crearEvento(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		CiudadBO cBO = new CiudadBO();
		List<Ciudad> listaCiudades = cBO.recuperarTodas();
		request.setAttribute("listaCiudad", listaCiudades);
		request.getRequestDispatcher("crearEvento.jsp").include(request, response);
		
	}

	private void verEvento(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		String idEvento = request.getParameter("idEvento");
		EventoBO eventoB = new EventoBO();
		Evento evento = eventoB.recuperarEventoById(idEvento);
		ComentarioBO comentarioBO = new ComentarioBO();
		List<Comentario> listaC = comentarioBO.recuperarTodos();
		
		MultimediaBO multiBO = new MultimediaBO();
		List<Multimedia> listaFotos = multiBO.recuperarFotosByEvento(idEvento);
		List<Multimedia> listaVideo = multiBO.recuperarVideoByEvento(idEvento);
		
		request.setAttribute("listaComentario", listaC);
		request.setAttribute("listaFoto", listaFotos);
		request.setAttribute("listaVideo", listaVideo);
		request.setAttribute("evento", evento);
		request.getRequestDispatcher("visualizarEvento.jsp").include(request, response);
		
	}

	private void verCalendario(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		HttpSession sesion = request.getSession();
		Usuario user = (Usuario)sesion.getAttribute("usuario");
		EventoBO em = new EventoBO();
		List<Evento> tareas = em.recuperarEventosByUsuario(user.getIdUsuario());
		List<List<String>> tar = Calendario.escribirXml(tareas);
		
		request.setAttribute("listaDeListas", tar);
		request.setAttribute("listaEvento", tareas);
		request.getRequestDispatcher("Calendario.jsp").include(request, response);
		
	}

}
